package com.awccis.customer.service;

import com.awccis.admin.model.sorder.ServiceOrderSimpleBean;
import com.awccis.customer.model.CustomerInfo;
import com.awccis.customer.model.UsualAddr;
import com.awccis.customer.model.adver.AdverImgLocationBean;
import com.awccis.customer.model.order.AppraiseBean;
import com.awccis.customer.model.order.OrderBean;
import com.awccis.customer.model.order.OrderInfo;
import com.awccis.driver.model.DriverInfo;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: 纯牛奶丶
 * @Date: 2018-04-03 21:43
 * @Since: 1.0
 * @Description: 乘客端业务逻辑接口
 **/
public interface CustomerService {
    
//    /**
//     * 验证是否已经登录过
//     * @param customerPhone customerPhone
//     * @return boolean
//     */
//    boolean selectLoginStatus(String customerPhone);
    
    /**
     *  乘客验证并登陆，获得个人信息
     * @param customerInfo customerInfo
     * @return customerInfo
     */
    CustomerInfo getCustomerLoginInfo(CustomerInfo customerInfo);
    
//    /**
//     *  设置登录状态为online
//     * @param customerPhone customerPhone
//     * @return Integer
//     */
//    Integer setOnline(String customerPhone);
//    /**
//     *  设置登录状态为online
//     * @param customerInfo customerInfo
//     * @return Integer
//     */
//    Integer setOffline(CustomerInfo customerInfo);
    /**
     * 乘客端信息注册
     * @param customerInfo customerInfo
     * @return true or false
     */
    boolean registerCustomer(CustomerInfo customerInfo);

    /**
     * 更改乘客信息
     * @param customerInfo customer
     * @return
     */
    Boolean updateCustomerInfo(CustomerInfo customerInfo);
    
    /**
     * 添加初始订单
     * @param orderBean orderBean
     * @return true or false
     */
    int insertOrderInfoInit(OrderBean orderBean);
    
    /**
     * 查询历史订单总数
     * @param map customerInfo
     * @return Integer
     */
    int selectHistoryOrderCount(Map map);
    /**
     * 查询历史订单
     * @param map customerInfo
     * @return OrderBean
     */
    List<Map> selectHistoryOrder(Map map);
    /**
     * 计算价钱
     * @param distance 距离
     * @return 价钱
     */
    double calculatePrice(double distance);
    
    /**
     * 取消订单
     * @param orderInfo orderInfo
     * @return boolean
     */
    boolean cancelOrder(OrderInfo orderInfo);
    
    /**查询评价
     * @param orderId orderId
     * @return boolean
     */
    AppraiseBean selectAppraiseOrder(Integer orderId);
    
    /**插入评价
     * @param appraiseBean appraiseBean
     * @return boolean
     */
    boolean insertAppraiseOrder(AppraiseBean appraiseBean);
    
    /**
     * 查询常用地址信息
     * @return List<UsualAddr>
     */
    Map<Integer,List<UsualAddr>> selectUsualAddr();
    
    /**
     * 根据地址名称返回地址详细信息、经纬度
     * @param addrName addrName
     * @return List<UsualAddr>
     */
    UsualAddr selectUsualAddrByName(String addrName);
    
//    /**
//     * 获取前10相对距离靠前的司机
//     * @param map
//     * @return 司机列表
//     */
//    List<DriverInfo> getDriverTop10(Map map);

    /**
     * 通过phone获取当前的订单
     * @param hashMap customerPhone
     * @return orderBean
     */
    OrderBean selectCurrentOrderByPhone(HashMap hashMap);

    /**
     * 获取图片位置
     * @return list
     */
    List<AdverImgLocationBean> getAdverImgPath();

    /**
     * 随机获取一张广告图片的位置
     * @return list
     */
    List<AdverImgLocationBean> getOneRandomLogoPath();

    /**
     * 随机获取一张广告图片
     * @return list
     */
    List<AdverImgLocationBean> getOneRandomLogoPathByCode();
    /**
     * 给司机发送订单信息短息
     * @param orderBean orderBean
     * @return 发送结果
     */
    String sendOrderInfoToDriver(OrderBean orderBean);

    /**
     * 根据ID查询乘客的预约订单
     * @param customerId customerID
     * @return list
     */
    List<ServiceOrderSimpleBean> getCusotmerServiceOrderById(int customerId);

    /**
     * 记录访问信息
     * @param map 1
     */
    void recordVisitInfo(Map map);

    /**
     * 根据订单号查询对应司机编号
     * @param orderId
     */
    int getDriverIdByOrderId(int orderId);
}
